iT邦幫忙

1

案例說明ChatGPT是否能勝任資深Java程式設計師-Part II:My程式碼

  • 分享至 

  • xImage
  •  

上一篇是ChatGPT針對以下問題:
我有一組資料: 1=滿福堡餐、2=豬肉滿福堡餐、3=豬肉滿福堡加蛋餐、4=無敵豬肉滿福堡加蛋餐、5=青蔬滿福堡餐。當使用者輸入1時,印出『您好,請問您點的是滿福堡餐嗎?』輸入2時,印出『您好,請問您點的是豬肉滿福堡餐嗎?』輸入3時,印出『您好,請問您點的是豬肉滿福堡加蛋餐嗎?』輸入4時,印出『您好,請問您點的是無敵豬肉滿福堡加蛋餐嗎?』輸入5時,印出『您好,請問您點的是青蔬滿福堡餐嗎?』
所給出的Java程式解決方案。

有興趣回顧的話,可以參考:前情提要/images/emoticon/emoticon12.gif


本篇分享下我自己對於相同問題給出的Java程式解決方案。我的程式碼包含兩個部分:一個是業務邏輯的處理程式,另一個則是資料面向的程式。

業務邏輯程式碼:

import java.util.Scanner;
public class MyDemo {
    public static void main(String[] args) {
        MyData data = new MyData();
        Scanner scanner = new Scanner(System.in);
        System.out.print("請輸入您要點的餐點編號:");
        int input = scanner.nextInt();
        if (input > data.menu.size()-1 || input <=0)
            System.out.println(data.menu.get(0) + "1~" + (data.menu.size()-1) + "。");
        else
            System.out.println("您好,請問您點的是" + data.menu.get(input) + "嗎?");
    }
}

資料程式碼:

import java.util.ArrayList;
public class MyData {
    public ArrayList<String> menu;
    MyData () {
        menu = new ArrayList<String>();
        menu.add("您的點餐號不存在,請重新輸入餐號");
        menu.add("滿福堡餐");
        menu.add("豬肉滿福堡餐");
        menu.add("豬肉滿福堡加蛋餐");
        menu.add("無敵豬肉滿福堡加蛋餐");
        menu.add("青蔬滿福堡餐");
        //menu.add("");
    }
}

執行結果如下:
https://ithelp.ithome.com.tw/upload/images/20230311/20109107nLn4nwj7BP.png
https://ithelp.ithome.com.tw/upload/images/20230311/20109107wNfFpL8f2Y.png
執行結果與ChatGPT的執行結果大同小異,滿足題目給定的需求。


分析一下自己的設計理念與ChatGPT最大的差異在於這段描述:『我有一組資料: 1=滿福堡餐、2=豬肉滿福堡餐、3=豬肉滿福堡加蛋餐、4=無敵豬肉滿福堡加蛋餐、5=青蔬滿福堡餐』中,我是將餐點看成資料的一部分,而ChatGPT則是將這段描述當成是業務邏輯的一部分。
ChatGPT將1=滿福堡餐、2=豬肉滿福堡餐...等資料放在switch的結果,就是當main方法結束後,這些資料就消失了。
反觀我的設計切出一個MyData類別,這些資料未來則可以被其他要開發的功能給呼叫使用。最具體的影響就是當這些資料要被放進資料庫(例如:MySQL)而需要改寫重構時,直接針對MyData這個類別進行重構即可。值得一提的是,MyData類別中,刻意選用ArrayList來儲存資料的原因,也是因為這是與資料庫互轉資料常用的類別。
更直觀的優點,當加入新資料時,我提供的解決方案只需要在MyData的程式區段中,將註解的部分修改為

menu.add("鬆餅餐");

一切就修正完畢了。業務邏輯的部份完全不需要調整。

執行結果如下:
https://ithelp.ithome.com.tw/upload/images/20230311/20109107W5nE55qBCY.png
https://ithelp.ithome.com.tw/upload/images/20230312/20109107QB3QmY57DT.png


分析完可擴展性、可維護性的面向後,接著來看一下程式碼的精簡度。

https://ithelp.ithome.com.tw/upload/images/20230312/20109107CG1iHsjtTt.png
ChatGPT的BurgerOrder.java,未添加6=鬆餅餐時,就有29行了。
https://ithelp.ithome.com.tw/upload/images/20230312/20109107U6wkyfd6LF.png
反觀我的程式碼,MyData.java還是包含6=鬆餅餐,兩段加起來也才14+13=27行。


ChatGPT的評鑑報告:

程式精簡度 程式可擴充性 程式可維護性 是否勝任資深Java PG
X X X 失格

不過AI強大的地方在於越多人餵它資料,日後給出的答案會更好。現在的ChatGPT無法勝任資深Java程式設計師只是在2023年3月我測試評鑑的當下無法,1年後甚至是10年後就難說了。

https://ithelp.ithome.com.tw/upload/images/20230312/20109107m9cCLFuDuY.png
/images/emoticon/emoticon29.gif


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言